Fragment是Android應用程式中的一部分,在同一個Activity中實現模組化和可重用的UI元件,可以將Fragment視為Activity內的小部件,將多個Fragment組合在一個Activity中。
了解Fragment的生命週期可以更有效地管理Fragment的操作、UI和資料。
當Fragment與Activity關聯時。此方法被調用。您可以在這裡執行初始化操作,例如設置與Activity的連接或獲取Activity提供的資源。
當Fragment正在被創建時,通常執行與Fragment的初始化相關的操作。
此方法用於創建Fragment的UI元素,它返回Fragment綁定的View。在這裡,您應該載入佈局資源文件並初始化UI元素。
此階段初始化Fragment的UI元件和執行與UI相關的操作,用於創建和配置Fragment的可見部分。
Fragment即將可見,這個階段執行與Fragment可見性相關的操作,可以在這邊開始動畫或更新UI。
開始執行需要與使用者交互的操作,像是監控使用者操作與動態更新UI。
當Fragment即將失去焦點時,此階段應暫停或停止與使用者交互的操作,並執行一些清理工作。
當Fragment變得不可見時,在這個階段,應該要釋放不需要的資源,停止執行任何消耗資源的操作。
在Fragment的UI元件將被移除之前,此階段應該釋放UI相關資源。
執行任何需要在Fragment銷毀之前進行的清理操作,如關閉數據庫連接或停止後台服務。
當Fragment從Activity中分離時,執行最後的清理操作,通常是釋放對Activity的引用。
在不同生命週期方法中使用Log於Android Fragment中記錄生命週期狀態:
在activity_main.xml中創建一個FrameLayout佈局:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
創建一個Fragment類(MyFragment、fragment_my.xml),並實現所有的生命週期方法以及Log訊息:
public class MyFragment extends Fragment {
private static final String TAG = "MyFragment";
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
Log.d(TAG, "onAttach");
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate");
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
Log.d(TAG, "onCreateView");
return inflater.inflate(R.layout.fragment_my, container, false);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Log.d(TAG, "onActivityCreated");
}
@Override
public void onStart() {
super.onStart();
Log.d(TAG, "onStart");
}
@Override
public void onResume() {
super.onResume();
Log.d(TAG, "onResume");
}
@Override
public void onPause() {
super.onPause();
Log.d(TAG, "onPause");
}
@Override
public void onStop() {
super.onStop();
Log.d(TAG, "onStop");
}
@Override
public void onDestroyView() {
super.onDestroyView();
Log.d(TAG, "onDestroyView");
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy");
}
@Override
public void onDetach() {
super.onDetach();
Log.d(TAG, "onDetach");
}
}
在MainActivity中將Fragment添加到Activity中:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_container, new MyFragment())
.commit();
}
}